private _initFromOpenDatabase(openDatabase, forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) { var dbName = this.handler.uniqueKey ? this.handler.uniqueKey : getUniqueKey();
var detectIndexedDB = new teapo.storage.attached.indexedDB.DetectStorage();
detectIndexedDB.detectStorageAsync(dbName, (errorIndexedDB, load) => { var detectWebSQL = new teapo.storage.attached.webSQL.DetectStorage();
detectWebSQL.detectStorageAsync(dbName, (errorWebSQL, load) => { 'Persistent storage is not stable\n'+
'indexedDB ' + errorIndexedDB + '\n' +
'webSQL ' + errorWebSQL);
this._initWithStorage(load, forceLoadFromDom, pathElements);
this._initWithStorage(load, forceLoadFromDom, pathElements);
var db = openDatabase(dbName, 1, null, 1024 * 1024 * 5);
callback: (transaction: SQLTransaction, result: SQLResultSet) => void,
errorCallback: (transaction: SQLTransaction, error: SQLError) => void) => { var errorCallbackSafe = (t: SQLTransaction, e: SQLError) => { alert(e + ' ' + e.message + '\n' + sqlStatement + '\n' + args);
db.transaction((t) => t.executeSql(sqlStatement, args, callback, errorCallbackSafe));
this._insertMetadataSql = 'INSERT INTO "*metadata" (name, value) VALUES(?,?)';
this._updateMetadataSql = 'UPDATE "*metadata" SET value=? WHERE name=?';
this._metadataProperties = {}; this._loadTableListFromWebsql((tableList) => { this._initWithTableList(tableList, forceLoadFromDom, pathElements);
private _initWithStorage(load: teapo.storage.attached.LoadStorage, forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) { var domEdited = this._metadataElement ?
safeParseInt(this._metadataElement.getAttribute('edited')) : if (domEdited || 0 < load.editedUTC || 0) { console.log('DOM is younger, need to call load.load', domEdited, load.editedUTC); console.log('DOM is older, need to call load.migrate', domEdited, load.editedUTC); private _initWithTableList(tableList: string[], forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) { var metadataTableExists = false;
for (var i = 0; i < tableList.length; i++) { if (tableList[i] === '*metadata') { metadataTableExists = true;
if (!metadataTableExists || forceLoadFromDom) { this._loadInitialStateFromDom(pathElements);
var domEdited = this._metadataElement ?
safeParseInt(this._metadataElement.getAttribute('edited')) :